// 支付宝支付相关方法
import { TipError } from '@common/tip';
import { redirectTo } from '@common/utils';
import { platformTruth } from '@common/environment';
const AlipayJSBridge = window.AlipayJSBridge;

/**
 * 执行支付宝支付，拉起支付宝支付界面
 * @param {Object} prepayRes 预支付订单详情
 * @param {String} orderNumber 订单号
 * @param {Function} callback 回调函数
 */
export const invokeAliPay = (prepayRes, orderNumber, callback) => {
    const { jsPay, trade_no, error_code, error_message } = prepayRes;
    const { isAlipayMini } = platformTruth();
    if (isAlipayMini) {
        window.my.tradePay({
            tradeNO: trade_no,
            success: (res) => {
                callback(true);
            },
            fail: (res) => {
                callback(false, 'fail');
            }
        });
    } else if (jsPay) {
        AlipayJSBridge && AlipayJSBridge.call('tradePay',{
            tradeNO: trade_no,
        }, (result) => {
            /** 支付结果
             '9000': 订单支付成功
             '8000': 正在处理中
             '4000': 订单支付失败
             '6001': 用户中途取消
             '6002': 网络连接出错
             '99': 用户点击忘记密码快捷界面退出(only iOS since 9.5)
            */
            const { resultCode } = result;
            if (resultCode === '9000') {
                callback(true);
            } else if (resultCode === '6001' || resultCode === '99') {
                callback(false, 'cancel');
            } else if (resultCode === '4000') {
                callback(false, 'fail');
            } else if (resultCode === '8000') {
                callback(false, 'paying');
            } else if (resultCode === '6002') {
                TipError('网络连接出错, 请在网络恢复后刷新重试');
            } else { // 其他情况
                TipError('支付失败');
            }
        });
    } else if (error_code) {
        switch(error_code) {
        case 833:
            if (orderNumber) {
                redirectTo(`order/detail/${orderNumber}`);
            } else {
                // 跳转到商城订单列表
                redirectTo('shop-order/list');
            }
            break;
        case 646:
            TipError('执行过反结账的订单不能再进行手机自助付款, 请前往前台使用其他方式付款');
            break;
        default:
            TipError(error_message);
            break;
        }
    }
};

export default invokeAliPay;
